home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_494 / bref / bref.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  19KB  |  635 lines

  1. /* Program bref.c -- this is the main() module for BREF icon version */
  2.  
  3. /* Set TAB value to 3 for this listing. */
  4.  
  5. /*        Lib name        Invoke name        Function */
  6.  
  7. /*        bref.c        main            BREF Window, requesters--OPTION, ERROR */
  8. /*        bref2.c        main2            Cross reference table */
  9. /*        bref3.c        help            On-screen user information */
  10. /*        bref4.c        FileWindow    Select input */
  11.  
  12. char  Version[] = "V 2.0";
  13.  
  14. #include <exec/types.h>
  15. #include <intuition/intuition.h>
  16. #include <stdio.h>
  17.  
  18.             /* Data referenced by main2() -- declared extern in main2() */
  19. int  icon;                        /* T = icon invoke, F = CLI invoke */
  20. char *Filename;                /* input file name */
  21. UBYTE out_name[40] = "PRT:";    /* WorkBench invoke default output to printer*/
  22. char Brefhdr[133];            /* Report heading */
  23. int Maxlinwidth = 80;        /* Max char's per line (-W) */
  24. int Maxpaglines = 66;        /* Max lines per page (-L) */
  25. int FormFeed = TRUE;            /* Use form feeds? (-S) */ 
  26. int Quiet = FALSE;            /* Suppress print input file? (-Q) */
  27. int Elite = FALSE;            /* Print input file 12 char/in? (-E) */
  28. int ShowKeyWords = FALSE;    /* Show BASIC keywords in table? (-K) */
  29.  
  30. struct Window *w;            /* Referenced by help() -- extern in help() */
  31.  
  32.                     /* Declare external functions */
  33. extern USHORT FileWindow();    /* input file selector */
  34. extern void main2();                /* cross ref table function */
  35. extern int  help();                /* display HELP screens */
  36.  
  37. struct IntuitionBase *IntuitionBase;
  38. char *strchr();
  39.  
  40. /* #include "FileWindow.h" --  Included code for  FileWindow.h */
  41.  
  42. /* What file_window() will return: */
  43. #define GO      500
  44. #define OPTIONS 600
  45. #define HELP    700
  46. #define CANCEL  800
  47. #define QUIT    900
  48. #define PANIC1  1001
  49. #define PANIC2  1002
  50.  
  51. /* The maximum size of the strings: */
  52. #define DRAWER_LENGTH 100 /*  100 char's incl NULL. */
  53. #define FILE_LENGTH    30 /*   30       -"-         */
  54. #define TOTAL_LENGTH  130 /*  130       -"-         */
  55.  
  56. /* THE END of FileWindow.h */
  57.  
  58. /*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/
  59. UBYTE undo_buff[133];            /* Undo buffer for string gadgets */
  60.  
  61. #define BOXW  80        /* Req1 gadget box width */
  62. #define BOXH  15        /* Req1 gadget box height */
  63.  
  64.         /* Use boxR1 for all Req1 gadgets */
  65. SHORT boxR1[] = {0,0,  BOXW-1,0,  BOXW-1,BOXH-1,  0,BOXH-1,  0,0};
  66.  
  67. struct Border borderR1 = {0,0,1,0,JAM1,5,boxR1,NULL};
  68.  
  69. /*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/
  70.  
  71.         /* Req3 -- Str31 gadget output option  structures */
  72.  
  73. SHORT str31_box[] = {-7,-4,  150,-4,  150,11,  -7,11,  -7,-4};
  74.  
  75. struct Border str31_border = {0,0,1,0,JAM1,5,str31_box,NULL};
  76.  
  77. struct IntuiText str31_tex1 = {1,0,JAM1,160,-4,NULL,
  78.         "Output:  PRT: = Printer",NULL,};
  79. struct IntuiText str31_tex2 = {1,0,JAM1,232,5,NULL,
  80.         "Filespec",&str31_tex1,};
  81.  
  82. struct StringInfo str31_info = {out_name, undo_buff,0,40,0,0,0,0,0,0,
  83.         NULL,NULL,};
  84.  
  85. struct Gadget str31_gadget =
  86.     {    NULL,10,32,148,8,GADGHCOMP,  GADGIMMEDIATE | RELVERIFY,
  87.         STRGADGET | REQGADGET, &str31_border, NULL,&str31_tex2,
  88.         NULL,&str31_info,0,NULL};
  89.  
  90.         /* Req3 -- Str32 gadget page width option  structures */
  91.  
  92. SHORT str32_box[] = {-7,-4,  52,-4,  52,11,  -7,11,  -7,-4};
  93.  
  94. struct Border str32_border = {0,0,1,0,JAM1,5,str32_box,NULL};
  95.  
  96. struct IntuiText str32_text = {1,0,JAM1,60,0,NULL,
  97.         "Page width  (27-132)",NULL,};
  98.  
  99. UBYTE PWbuff[4];
  100. struct StringInfo str32_info = {PWbuff, undo_buff,0,4,0,0,0,0,0,0,
  101.         NULL,NULL,};
  102.  
  103. struct Gadget str32_gadget =
  104.     {    &str31_gadget,10,68,50,8,GADGHCOMP,  GADGIMMEDIATE | RELVERIFY |
  105.         LONGINT, STRGADGET | REQGADGET, &str32_border, NULL,&str32_text,
  106.         NULL,&str32_info,0,NULL};
  107.  
  108.         /* Req3 -- Str33 gadget page length option  structures */
  109.  
  110. SHORT str33_box[] = {-7,-4,  52,-4,  52,11,  -7,11,  -7,-4};
  111.  
  112. struct Border str33_border = {0,0,1,0,JAM1,5,str33_box,NULL};
  113.  
  114. struct IntuiText str33_text = {1,0,JAM1,60,0,NULL,
  115.         "Page length  (4-999)",NULL,};
  116.  
  117. UBYTE PLbuff[4];
  118. struct StringInfo str33_info = {PLbuff, undo_buff,0,4,0,0,0,0,0,0,
  119.         NULL,NULL,};
  120.  
  121. struct Gadget str33_gadget =
  122.     {    &str32_gadget,10,86,50,8,GADGHCOMP,  GADGIMMEDIATE | RELVERIFY |
  123.         LONGINT, STRGADGET | REQGADGET, &str33_border, NULL,&str33_text,
  124.         NULL,&str33_info,0,NULL};
  125.  
  126.         /* Req3 -- Str34 gadget output option  structures */
  127.  
  128. SHORT str34_box[] = {-7,-4,  150,-4,  150,11,  -7,11,  -7,-4};
  129.  
  130. struct Border str34_border = {0,0,1,0,JAM1,5,str34_box,NULL};
  131.  
  132. struct IntuiText str34_tex = {1,0,JAM1,160,0,NULL,
  133.         "Report heading, if not filename",NULL,};
  134.  
  135. struct StringInfo str34_info = {Brefhdr, undo_buff,0,133,0,0,0,0,0,0,
  136.         NULL,NULL,};
  137.  
  138. struct Gadget str34_gadget =
  139.     {    &str33_gadget,10,50,148,8,GADGHCOMP,  GADGIMMEDIATE | RELVERIFY,
  140.         STRGADGET | REQGADGET, &str34_border, NULL,&str34_tex,
  141.         NULL,&str34_info,0,NULL};
  142.  
  143.         /* Req3 -- Tog31 "FormFeed?" gadget structures */
  144.  
  145. SHORT tog31_box[] = {0,0,  15,0,  15,10,  0,10,  0,0};
  146.  
  147. struct Border tog31_border = {0,0,1,0,JAM1,5,tog31_box,NULL};
  148.  
  149. UBYTE tog31_char = 'Y';
  150. struct IntuiText tog31_tex1 = {1,0,JAM1,4,2,NULL,&tog31_char,NULL};
  151. struct IntuiText tog31_tex2 = {1,0,JAM1,24,2,NULL,"Form Feeds",&tog31_tex1};
  152.  
  153. struct Gadget tog31_gadget = {&str34_gadget,14,120,16,11,GADGHCOMP,
  154.         GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET,
  155.         &tog31_border,NULL,&tog31_tex2,NULL,NULL,0,NULL};
  156.  
  157.         /* Req3 -- tog32 "Print Input?" gadget structures */
  158.  
  159. SHORT tog32_box[] = {0,0,  15,0,  15,10,  0,10,  0,0};
  160.  
  161. struct Border tog32_border = {0,0,1,0,JAM1,5,tog32_box,NULL};
  162.  
  163. char tog32_char = 'Y';
  164. struct IntuiText tog32_tex1 = {1,0,JAM1,4,2,NULL,&tog32_char,NULL};
  165. struct IntuiText tog32_tex2 = {1,0,JAM1,24,2,NULL,
  166.         "Print input file",&tog32_tex1};
  167.  
  168. struct Gadget tog32_gadget = {&tog31_gadget,14,136,16,11,GADGHCOMP,
  169.         GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET,
  170.         &tog32_border,NULL,&tog32_tex2,NULL,NULL,0,NULL};
  171.  
  172.         /* Req3 -- tog33 "Input print pitch" gadget structures */
  173.  
  174. SHORT tog33_box[] = {0,0,  23,0,  23,10,  0,10,  0,0};
  175.  
  176. struct Border tog33_border = {0,0,1,0,JAM1,5,tog33_box,NULL};
  177.  
  178. char tog33_char[] = "10";
  179. struct IntuiText tog33_tex1 = {1,0,JAM1,4,2,NULL,tog33_char,NULL};
  180. struct IntuiText tog33_tex2 = {1,0,JAM1,34,2,NULL,
  181.         "Print Pitch (10/12 cpi)",&tog33_tex1};
  182.  
  183. struct Gadget tog33_gadget = {&tog32_gadget,14,152,24,11,GADGHCOMP,
  184.         GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET,
  185.         &tog33_border,NULL,&tog33_tex2,NULL,NULL,0,NULL};
  186.  
  187.         /* Req3 -- tog34 "Show Keywords?" gadget structures */
  188.  
  189. SHORT tog34_box[] = {0,0,  15,0,  15,10,  0,10,  0,0};
  190.  
  191. struct Border tog34_border = {0,0,1,0,JAM1,5,tog34_box,NULL};
  192.  
  193. char tog34_char = 'N';
  194. struct IntuiText tog34_tex1 = {1,0,JAM1,4,2,NULL,&tog34_char,NULL};
  195. struct IntuiText tog34_tex2 = {1,0,JAM1,24,2,NULL,
  196.         "Show BASIC keywords",&tog34_tex1};
  197.  
  198. struct Gadget tog34_gadget = {&tog33_gadget,14,168,16,11,GADGHCOMP,
  199.         GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET,
  200.         &tog34_border,NULL,&tog34_tex2,NULL,NULL,0,NULL};
  201.  
  202.         /* Req3 -- HELP3 gadget structures */
  203.  
  204. struct IntuiText help3_text = {3,0,JAM1,20,4,NULL,"HELP",NULL};
  205.  
  206. struct Gadget help3_gadget = {&tog34_gadget,380,10,BOXW,BOXH,GADGHCOMP,
  207.         GADGIMMEDIATE | RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET,
  208.         &borderR1,NULL,&help3_text,NULL,NULL,0,NULL};
  209.  
  210.         /* Req3 -- Save3 gadget structures */
  211.  
  212. struct IntuiText save3_text = {3,0,JAM1,20,4,NULL,"SAVE",NULL};
  213.  
  214. struct Gadget save3_gadget = {&help3_gadget,380,136,BOXW,BOXH,GADGHCOMP,
  215.         GADGIMMEDIATE | RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET,
  216.         &borderR1,NULL,&save3_text,NULL,NULL,0,NULL};
  217.  
  218.         /* Req3 -- OK3 gadget structures */
  219.  
  220. struct IntuiText ok3_text = {3,0,JAM1,25,4,NULL,"OK",NULL};
  221.  
  222. struct Gadget ok3_gadget = {&save3_gadget,380,160,BOXW,BOXH,GADGHCOMP,
  223.         GADGIMMEDIATE | RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET,
  224.         &borderR1,NULL,&ok3_text,NULL,NULL,0,NULL};
  225.  
  226.         /* Requester #3 structures -- Options*/
  227.  
  228. SHORT req3_box[] = {0,0,  499,0,  499,184,  0,184,  0,0};
  229.  
  230. struct Border req3_border = {0,0,1,0,JAM1,5,req3_box,NULL,};
  231.  
  232. struct IntuiText req3_tex1 = {3,0,JAM1,130,4,NULL,
  233.         "BREF Options",NULL,};
  234. struct IntuiText req3_tex2 = {2,3,JAM2,30,16,NULL,
  235.         "Click box, type change, RETURN",&req3_tex1,};
  236. struct IntuiText req3_tex3 = {2,3,JAM2,46,108,NULL,
  237.         "Toggle:  Click box to flip",&req3_tex2,};
  238.  
  239. struct Requester req3 = {NULL,30,10,500,185,0,0,&ok3_gadget,&req3_border,
  240.         &req3_tex3,NULL,2,NULL,NULL,NULL,NULL,NULL};
  241.  
  242. /*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/
  243.  
  244.         /* Req2 -- OK gadget structures */
  245.  
  246. struct IntuiText ok_text = {1,0,JAM1,25,4,NULL,"OK",NULL};
  247.  
  248. struct Gadget ok_gadget =
  249.     {    NULL,25,40,BOXW,BOXH,GADGHCOMP,
  250.         GADGIMMEDIATE | RELVERIFY | ENDGADGET,
  251.         BOOLGADGET | REQGADGET,
  252.         &borderR1,NULL,&ok_text,NULL,NULL,0,NULL};
  253.  
  254.         /* Requester #2 structures -- error message */
  255.  
  256. SHORT req2_box[] = {0,0,  599,0,  599,64,  0,64,  0,0};
  257.  
  258. struct Border req2_border = {0,0,1,0,JAM1,5,req2_box,NULL,};
  259.  
  260. char em_buff[75];
  261.  
  262. struct IntuiText req2_em = {2,3,JAM2,4,26,NULL,&em_buff,NULL};
  263.  
  264. struct IntuiText req2_text = {2,3,JAM2,14,8,NULL,
  265.         "BREF error:",&req2_em,};
  266.  
  267. struct Requester req2 =
  268.     {    NULL,10,20,600,65,0,0,&ok_gadget,&req2_border,&req2_text,
  269.         NULL,2,NULL,NULL,NULL,NULL,NULL};
  270.  
  271.         /* Window declares */
  272.  
  273. struct NewWindow nw =
  274.     {    0,0,640,200,0,1,
  275.         CLOSEWINDOW | GADGETUP,
  276.         SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG | WINDOWDEPTH |
  277.         WINDOWSIZING | ACTIVATE,
  278.         NULL,NULL,"BREF Window", NULL,NULL,
  279.         140,50,640,200,WBENCHSCREEN};
  280.  
  281. struct IntuiMessage *msg;
  282. BOOL result;
  283.  
  284. main(argc,argv)
  285.     int argc;
  286.     char *argv[];
  287. {
  288. struct IntuiText int_text = {
  289.         1,0,JAM2,16,9,NULL,
  290.         NULL,        /* IText */
  291.         NULL};
  292.  
  293. char *text[] = {
  294.         "Hang in there -- BREF executing . . .",
  295.         "BREF execution completed -- short pause . . .",
  296.         "Completed read file BREF.Option",
  297.         "Completed write file BREF.Option",
  298.         "                                "    /* blanks for erase msg */
  299.     };
  300.  
  301.  BOOL fin, Req_3, result3 = FALSE, all_done = FALSE, Do_FW;
  302.  ULONG class;
  303.  struct Gadget *address;
  304.  int n, hrc;
  305.  USHORT operation;            /* return code from FileWindow */
  306.  UBYTE file[TOTAL_LENGTH]; /* file name returned from FileWindow */
  307.  
  308.  if (argc < 2)
  309.     icon = TRUE;
  310.  else
  311.  {    icon = FALSE;            /* CLI mode -- no User Interface requesters */
  312.     main2(argc,argv);
  313.     exit(0);
  314.  }
  315.  Filename = NULL;
  316.  file[0] = '\0';            /* null the FileWindow filename */
  317.  Brefhdr[0] = '\0';        /* null report header */
  318.  strcpy(PLbuff,"66");    /* Initialize Page Line value */
  319.  strcpy(PWbuff,"80");    /* Initialize Page Width value */
  320.  
  321.  IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0);
  322.  if (IntuitionBase == NULL)
  323.     ErrMsg(2,"System error, can't open Intuition.");
  324.         /* Code = 2 signals no close of Window, Intuition */
  325.  
  326.  w = (struct Window *) OpenWindow(&nw);
  327.  if (w == NULL)
  328.     ErrMsg(1,"System error, can't open Window.");
  329.         /* Code = 1 signals no close Window, close Intuition */
  330.  
  331.  n = ReadOpt();            /* Read Option file, if available */
  332.  if (n)
  333.  {    Do_FW = TRUE; Req_3 = FALSE;         /* Set to activate FileWindow */
  334.     int_text.IText = text[2];
  335.     PrintIText(w->RPort,&int_text,0,165);
  336.  }
  337.  else
  338.  { Do_FW = FALSE; Req_3 = TRUE; }    /* Set to activate Option Requester */
  339.  
  340.  while (!all_done)
  341.  {
  342.     if (Do_FW)
  343.     {
  344.         Do_FW = FALSE;
  345.         operation = FileWindow(file);        /* Invoke FileWindow */
  346.         int_text.IText = text[4];            /* Erase Read file msg */
  347.         PrintIText(w->RPort,&int_text,0,165);
  348.  
  349.         switch (operation)
  350.         {
  351.             case GO:
  352.                 Filename = file;
  353.                 fin = TRUE; all_done = TRUE;
  354.                 break;
  355.             case OPTIONS:
  356.                 Req_3 = TRUE;
  357.                 break;
  358.             case HELP:
  359.                 hrc = help();        /* display Help screens */
  360.                 fin = TRUE;
  361.                 if (hrc ==1)
  362.                     all_done = TRUE;
  363.                 else Do_FW = TRUE;
  364.                 break;
  365.             case CANCEL:
  366.             case QUIT:
  367.             case PANIC2:
  368.                 fin = TRUE; all_done = TRUE;
  369.                 break;
  370.             case PANIC1:
  371.                 ErrMsg(0,"System error--can't open window for FileWindow");
  372.             default:
  373.             ErrMsg(0,"FileWindow serious problem, cause unknown. GET HELP.");
  374.         }
  375.     }
  376.     if (Req_3)
  377.     {
  378.         Req_3 = FALSE;
  379.         result3 = Request(&req3,w);
  380.         if (!result3) ErrMsg(0,"System error, can't activate Requester #3");
  381.         fin = FALSE;
  382.     }
  383.     while (!fin)
  384.     {
  385.         Wait(1 << w->UserPort->mp_SigBit);
  386.         while (msg = (struct IntuiMessage *) GetMsg(w->UserPort))
  387.         {
  388.             class = msg->Class;
  389.             address = msg->IAddress;
  390.             ReplyMsg(msg);
  391.  
  392.             switch(class)
  393.             {
  394.                 case GADGETUP:
  395.                     if (address == &ok3_gadget)
  396.                     {
  397.                         fin = TRUE;
  398.                         Do_FW = TRUE;        /* Revert to FileWindow */
  399.                     }
  400.                     else if (address == &help3_gadget)
  401.                     {    
  402.                         hrc = help();        /* Display Help screens */
  403.                         fin = TRUE;
  404.                         if (hrc == 1)
  405.                             all_done = TRUE;
  406.                         else Req_3 = TRUE;
  407.                     }
  408.                     else if (address == &save3_gadget)
  409.                     {    WriteOpt();            /* Write options file */
  410.                         int_text.IText = text[3];
  411.                         PrintIText(w->RPort,&int_text,0,165);
  412.                         fin = TRUE;
  413.                         Do_FW = TRUE;        /* Revert to FileWindow */
  414.                     }
  415.                     else if (address == &str31_gadget)
  416.                         ;        /* OK, have output name */
  417.                     else if (address == &str32_gadget)
  418.                     {    n = str32_info.LongInt;
  419.                         if (n > 132) n = 132;
  420.                         if (n < 27) n = 27;
  421.                         Maxlinwidth = n;
  422.                     }
  423.                     else if (address == &str33_gadget)
  424.                     {    n = str33_info.LongInt;
  425.                         if (n > 999) n = 999;
  426.                         if (n < 4) n = 4;
  427.                         Maxpaglines = n;
  428.                     }
  429.                     else if (address == &str34_gadget)
  430.                         ;        /* OK, have Report heading */
  431.  
  432.         /* Next 4 gadgets are Toggles.  In order to change the display char,*/
  433.         /* it is necessary to erase previous char(s), change char(s), */
  434.         /* then redisplay the gadget. */
  435.  
  436.                     else if (address == &tog31_gadget)
  437.                     {
  438.                         tog31_tex1.FrontPen = 2;    /* Erase prev char */
  439.                         RefreshGadgets(&tog31_gadget,w,&req3);
  440.                         if (FormFeed == TRUE)
  441.                         {    FormFeed = FALSE; tog31_char = 'N';}
  442.                         else {FormFeed = TRUE; tog31_char = 'Y';}
  443.                         tog31_tex1.FrontPen = 1;    /* Write new char */
  444.                         RefreshGadgets(&tog31_gadget,w,&req3);
  445.                     }
  446.                     else if (address == &tog32_gadget)
  447.                     {
  448.                         tog32_tex1.FrontPen = 2;    /* Erase prev char */
  449.                         RefreshGadgets(&tog32_gadget,w,&req3);
  450.                         if (Quiet == FALSE)
  451.                         {    Quiet = TRUE; tog32_char = 'N';}
  452.                         else {Quiet = FALSE; tog32_char = 'Y';}
  453.                         tog32_tex1.FrontPen = 1;    /* Write new char */
  454.                         RefreshGadgets(&tog32_gadget,w,&req3);
  455.                     }
  456.                     else if (address == &tog33_gadget)
  457.                     {
  458.                         tog33_tex1.FrontPen = 2;    /* Erase prev char */
  459.                         RefreshGadgets(&tog33_gadget,w,&req3);
  460.                         if (Elite == FALSE)
  461.                         {    Elite = TRUE; tog33_char[1] = '2';}
  462.                         else {Elite = FALSE; tog33_char[1] = '0';}
  463.                         tog33_tex1.FrontPen = 1;    /* Write new char */
  464.                         RefreshGadgets(&tog33_gadget,w,&req3);
  465.                     }
  466.                     else if (address == &tog34_gadget)
  467.                     {
  468.                         tog34_tex1.FrontPen = 2;    /* Erase prev char */
  469.                         RefreshGadgets(&tog34_gadget,w,&req3);
  470.                         if (ShowKeyWords == TRUE)
  471.                         {    ShowKeyWords = FALSE; tog34_char = 'N';}
  472.                         else {ShowKeyWords = TRUE; tog34_char = 'Y';}
  473.                         tog34_tex1.FrontPen = 1;    /* Write new char */
  474.                         RefreshGadgets(&tog34_gadget,w,&req3);
  475.                     }
  476.                     break;
  477.             }    /* close switch(class) */
  478.         }        /* close while(msg...) */
  479.     }            /* close while(!fin) */
  480.  }                /* close while (!all_done) */
  481.  
  482.  if (Filename)
  483.  {
  484.     /* Send "BREF Executing" msg to window */
  485.     int_text.IText = text[0];
  486.     PrintIText(w->RPort,&int_text,0,50);
  487.  
  488.     main2(argc,argv);
  489.  
  490.     /* Send "Completed" msg to window */
  491.     int_text.IText = text[1];
  492.     PrintIText(w->RPort,&int_text,0,60);
  493.     Delay(150);        /* Pause for 3 sec's */
  494.  }
  495.  
  496.  CloseWindow(w);
  497.  CloseLibrary(IntuitionBase);
  498. }            /* close main() */
  499.  
  500. WriteOpt()                /* Write options to file BREF.Option */
  501. {
  502. FILE *opt;
  503. char MaxLW[5];
  504. char MaxPL[5];
  505. char togs[6];
  506.  
  507.  opt = fopen("BREF.Option","w");
  508.  if (opt == NULL)
  509.     ErrMsg(0,"Can't open BREF.Option file for write.");
  510.  
  511.  strcat (out_name,"\n");
  512.  fputs (out_name,opt);            /* Output name */
  513.  *strchr(out_name,'\n') = '\0';    /* Replace newline by null */
  514.  
  515.  strcat (Brefhdr,"\n");
  516.  fputs (Brefhdr,opt);            /* Report heading */
  517.  *strchr(Brefhdr,'\n') = '\0';    /* Replace newline by null */
  518.  
  519.  itoa(Maxlinwidth,MaxLW);        /* Convert integer to ASCII */
  520.  fputs (MaxLW,opt);                /* Max line width in char's */
  521.  
  522.  itoa(Maxpaglines,MaxPL);        /* Convert integer to ASCII */
  523.  fputs (MaxPL,opt);                /* No. lines/page */
  524.  
  525.  togs[0] = FormFeed + '0';
  526.  togs[1] = Quiet + '0';
  527.  togs[2] = Elite + '0';
  528.  togs[3] = ShowKeyWords + '0';
  529.  togs[4] = '\n';
  530.  togs[5] = '\0';
  531.  fputs (togs,opt);
  532.  fclose(opt);
  533. }
  534.  
  535. itoa(integ,ascii)        /* Integer to Ascii */
  536.   int integ;            /* 3-digit integer */
  537.   char ascii[];        /* Append 'newline' & null to Ascii */
  538. {
  539.  int i, n;
  540.  
  541.  n = integ;
  542.  for (i = 2; i > -1; --i)
  543.  {
  544.     if (n > 0) 
  545.     {    ascii[i] = (n % 10) + '0';
  546.         n = n / 10;
  547.     }
  548.     else ascii[i] = ' ';
  549.  }
  550.  ascii[3] = '\n';
  551.  ascii[4] = '\0';
  552. }
  553.  
  554. ReadOpt()                /* Read file BREF.Option, if available */
  555. {
  556. FILE *opt;
  557. char MaxLW[5];
  558. char MaxPL[5];
  559. char togs[6];
  560.  
  561.  opt = fopen("BREF.Option","r");
  562.  if (opt == NULL)
  563.     return(FALSE);
  564.  
  565.  fgets ((char *)out_name,40,opt);    /* Output name */
  566.  *strchr(out_name,'\n') = '\0';        /* Replace newline by null */
  567.  
  568.  fgets ((char *)Brefhdr,133,opt);    /* Report heading */
  569.  *strchr(Brefhdr,'\n') = '\0';
  570.  
  571.  fgets ((char *)MaxLW,5,opt);            /* No. char's/line = line width */
  572.  *strchr(MaxLW,'\n') = '\0';
  573.  strcpy(PWbuff,MaxLW);            /* Copy value to display buffer */
  574.  Maxlinwidth = atoi(MaxLW);    /* Convert ASCII to integer */
  575.  
  576.  fgets ((char *)MaxPL,5,opt);            /* No. lines/page = page length */
  577.  *strchr(MaxPL,'\n') = '\0';
  578.  strcpy(PLbuff,MaxPL);            /* Copy value to display buffer */
  579.  Maxpaglines = atoi(MaxPL);    /* Convert ASCII to integer */
  580.  
  581.  fgets ((char *)togs,6,opt);        /* 4 toggles */
  582.  
  583.  if (togs[0] == '0')
  584.  {    FormFeed = FALSE; tog31_char = 'N'; }
  585.  else {FormFeed = TRUE; tog31_char = 'Y'; }
  586.  
  587.  if (togs[1] == '0')
  588.  {    Quiet = FALSE; tog32_char = 'Y'; }
  589.  else {Quiet = TRUE; tog32_char = 'N'; }
  590.  
  591.  if (togs[2] == '0')
  592.  {    Elite = FALSE; tog33_char[1] = '0'; }
  593.  else {Elite = TRUE; tog33_char[1] = '2'; }
  594.  
  595.  if (togs[3] == '0')
  596.  {    ShowKeyWords = FALSE; tog34_char = 'N'; }
  597.  else {ShowKeyWords = TRUE; tog34_char = 'Y'; }
  598.  
  599.  fclose(opt);
  600.  return(TRUE);
  601. }
  602.  
  603.             /* ErrMsg -- requester #2 displays error message. */
  604.             /* Called from main(), help(), fatal() in main2 module */
  605.             /* ec: 0 = have Intuition, Window   1 = have Intuition,no window*/
  606.             /*     2 = no Intuition/window */
  607.  
  608. ErrMsg(ec,ptrn,data1)
  609.     int ec;
  610.     char *ptrn,*data1;
  611. {
  612.  if (ec == 0)            /* For ec = 0, have Window & Intuition */
  613.  {
  614.     sprintf(em_buff,ptrn,data1);    /* sprintf: format msg in em_buff */
  615.     result = Request(&req2,w);
  616.     if (result)
  617.     {
  618.         Wait(1 << w->UserPort->mp_SigBit);
  619.         while (msg = (struct IntuiMessage *) GetMsg(w->UserPort))
  620.             ReplyMsg(msg);                /* Clean out messages & finish up */
  621.     }
  622.     else
  623.     {
  624.         printf("Can't activate requester #2 for error msg.\n");
  625.         printf (ptrn,data1);
  626.     }
  627.  }
  628.  else printf (ptrn,data1);        /* No Window, or no Window/Intuition*/
  629.  
  630.  if (ec < 1) CloseWindow(w);
  631.  if (ec < 2) CloseLibrary(IntuitionBase);
  632.  
  633.  exit(10);
  634. }
  635.